/**
 * Hawk(鹰)
 *
 * 一个开源Web应用程序开发框架,兼容IE 9+,火狐,谷歌等主流浏览器.
 *
 * @package		Hawk
 * @author		颜风 <1963004330@qq.com>
 * @copyright	Copyright (c) 2013  颜风 <1963004330@qq.com>
 * @license		http://www.gnu.org/licenses/gpl.html
 * @link		http://git.oschina.net/yanfeng/Hawk
 * @since		Version 1.0.0
 * @filesource	http://git.oschina.net/yanfeng/Hawk
 */

// ---------------------------------------------------------------------

/*
 * 简要说明
 *
 * 1.锚链接示例: 
 * 		#/class/method/param1/param2/param3
 * 2.'#/'必须存在,用于减少与文档中真正存在的锚点的冲突;
 * 3.class,method,param分别指明想要调用的类,方法和传入的参数,参数可以有0个或多个;
 * 4.当mehtod为空时,即锚链接为 #/class 的形式时,如果指定的类存在index方法,则系统
 * 	 将默认调用此方法;
 * 5.系统将只在window.hawk的属性中寻找可用的类及其方法,以避免不必要的冲突.
 * 6.建议将此文件放置在网页的最后,保证用户通过含有锚点的链接访问网站时,网站能按预期显示.
 */

(function(){
	if(typeof window.hawk !== 'object'){
		window.hawk = {};
	}
	
	// 注册onhashchange事件,检测地址栏锚地址的变化.
	// 其中callbackFuncHashChange为onhashchange事件的句柄.
	window.addEventListener('hashchange', callbackFuncOnHashChange, false);
	function callbackFuncOnHashChange(){
		var uriHash = location.hash.replace(/^#\//, '');
		if(uriHash === location.hash)	return;// 说明锚链接不是以'#/'开头
		uriHash = uriHash.split('/');
		switch(uriHash.length){
			case 0:
				return;
			case 1:
				if(uriHash == '')	return;
				_hashFunc(uriHash[0],'index');
			case 2:
			default:
				_hashFunc(uriHash[0], uriHash[1], uriHash.slice(2));
		}
		
		//根据hash调用指定的类和方法,并传入指定的参数.
		function _hashFunc(className, methodName, params){
			if(window.hawk[className] && window.hawk[className][methodName]){
				window.hawk[className][methodName].apply(null, params);
			}
			
			return;
		}
	}
	
	// onhashchange句柄函数应在系统初始化时先自动执行一次.
	callbackFuncOnHashChange()
	
})();
